home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / w00w00 / trojans / dcron / subs.c < prev   
Encoding:
C/C++ Source or Header  |  1998-08-13  |  2.9 KB  |  144 lines

  1.  
  2. /*
  3.  * SUBS.C
  4.  *
  5.  * Copyright 1994 Matthew Dillon (dillon@apollo.west.oic.com)
  6.  * May be distributed under the GNU General Public License
  7.  */
  8.  
  9. #include "defs.h"
  10.  
  11. Prototype void log(int level, const char *ctl, ...);
  12. Prototype void log9(const char *ctl, ...);
  13. Prototype void logfd(int fd, const char *ctl, ...);
  14. Prototype void fdprintf(int fd, const char *ctl, ...);
  15. Prototype int ChangeUser(const char *user, short dochdir);
  16. Prototype void vlog(int level, int fd, const char *ctl, va_list va);
  17. Prototype int slog(char *buf, const char *ctl, va_list va, short useDate);
  18. Prototype char *strdup(const char *);
  19.  
  20. void 
  21. log9(const char *ctl, ...)
  22. {
  23.     va_list va;
  24.  
  25.     va_start(va, ctl);
  26.     vlog(9, 2, ctl, va);
  27.     va_end(va);
  28. }
  29.  
  30. void 
  31. log(int level, const char *ctl, ...)
  32. {
  33.     va_list va;
  34.  
  35.     va_start(va, ctl);
  36.     vlog(level, 2, ctl, va);
  37.     va_end(va);
  38. }
  39.  
  40. void 
  41. logfd(int fd, const char *ctl, ...)
  42. {
  43.     va_list va;
  44.  
  45.     va_start(va, ctl);
  46.     vlog(9, fd, ctl, va);
  47.     va_end(va);
  48. }
  49.  
  50. void 
  51. fdprintf(int fd, const char *ctl, ...)
  52. {
  53.     va_list va;
  54.     char buf[1024];
  55.  
  56.     va_start(va, ctl);
  57.     vsprintf(buf, ctl, va);
  58.     write(fd, buf, strlen(buf));
  59.     va_end(va);
  60. }
  61.  
  62. void
  63. vlog(int level, int fd, const char *ctl, va_list va)
  64. {
  65.     char buf[1024];
  66.     short n;
  67.     static short useDate = 1;
  68.  
  69.     if (level >= LogLevel) {
  70.         write(fd, buf, n = slog(buf, ctl, va, useDate));
  71.     useDate = (n && buf[n-1] == '\n');
  72.     }
  73. }
  74.  
  75. int
  76. slog(char *buf, const char *ctl, va_list va, short useDate)
  77. {
  78.     time_t t = time(NULL);
  79.     struct tm *tp = localtime(&t);
  80.  
  81.     buf[0] = 0;
  82.     if (useDate)
  83.     strftime(buf, 128, "%d-%b-%y %H:%M  ", tp);
  84.     vsprintf(buf + strlen(buf), ctl, va);
  85.     return(strlen(buf));
  86. }
  87.  
  88. int
  89. ChangeUser(const char *user, short dochdir)
  90. {
  91.     struct passwd *pas;
  92.  
  93.     /*
  94.      * Obtain password entry and change privilages
  95.      */
  96.  
  97.     if ((pas = getpwnam(user)) == 0) {
  98.         log(9, "failed to get uid for %s", user);
  99.         return(-1);
  100.     }
  101.     setenv("USER", pas->pw_name, 1);
  102.     setenv("HOME", pas->pw_dir, 1);
  103.     setenv("SHELL", "/bin/sh", 1);
  104.  
  105.     /*
  106.      * Change running state to the user in question
  107.      */
  108.  
  109.     if (initgroups(user, pas->pw_gid) < 0) {
  110.     log(9, "initgroups failed: %s %s", user, strerror(errno));
  111.     return(-1);
  112.     }
  113.     if (setregid(pas->pw_gid, pas->pw_gid) < 0) {
  114.     log(9, "setregid failed: %s %d", user, pas->pw_gid);
  115.     return(-1);
  116.     }
  117.     if (setreuid(pas->pw_uid, pas->pw_uid) < 0) {
  118.     log(9, "setreuid failed: %s %d", user, pas->pw_uid);
  119.     return(-1);
  120.     }
  121.     if (dochdir) {
  122.     if (chdir(pas->pw_dir) < 0) {
  123.         log(8, "chdir failed: %s %s", user, pas->pw_dir);
  124.         if (chdir(TMPDIR) < 0) {
  125.         log(9, "chdir failed: %s %s", user, pas->pw_dir);
  126.         log(9, "chdir failed: %s " TMPDIR, user);
  127.         return(-1);
  128.         }
  129.     }
  130.     }
  131.     return(pas->pw_uid);
  132. }
  133.  
  134. char *
  135. strdup(const char *str)
  136. {
  137.     char *ptr = malloc(strlen(str) + 1);
  138.  
  139.     if (ptr)
  140.         strcpy(ptr, str);
  141.     return(ptr);
  142. }
  143.  
  144.